package handlers

import (
	"data_service/models"
	"github.com/gin-gonic/gin"
	"net/http"
	"time"
)

// UpdateInfo 热更新信息结构体
type UpdateInfo struct {
	LatestVersion string `json:"latestVersion"`
	DownloadUrl   string `json:"downloadUrl"`
	IsForce       bool   `json:"isForce"`
	Description   string `json:"description"`
}

// CheckUpdate 检查应用更新
// @Summary 检查应用更新
// @Description 检查是否有新版本可供更新
// @Tags 更新
// @Accept json
// @Produce json
// @Success 200 {object} map[string]interface{} "更新信息"
// @Router /update [get]
func CheckUpdate(c *gin.Context) {
	// 这里应该从数据库或配置文件中获取最新的版本信息
	// 为了演示，我们返回一个固定的版本信息
	updateInfo := UpdateInfo{
		LatestVersion: "1.0.2",
		DownloadUrl:   "https://example.com/update/v1.0.2.wgt",
		IsForce:       false,
		Description:   "修复了动态发布bug，优化了加载速度",
	}

	c.JSON(http.StatusOK, gin.H{
		"data": updateInfo,
	})
}

// ReportVersion 上报当前版本信息
// @Summary 上报当前版本信息
// @Description 客户端上报当前应用版本信息
// @Tags 更新
// @Accept json
// @Produce json
// @Param version body map[string]string true "版本信息"
// @Success 200 {object} map[string]interface{} "上报结果"
// @Router /update/report [post]
func ReportVersion(c *gin.Context) {
	var req map[string]string
	if err := c.ShouldBindJSON(&req); err != nil {
		c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
		return
	}

	// 记录版本信息到数据库
	versionInfo := models.VersionInfo{
		Version:   req["version"],
		Platform:  req["platform"],
		UserID:    req["userId"],
		Timestamp: time.Now(),
	}

	// 保存版本信息到数据库
	err := models.SaveVersionInfo(versionInfo)
	if err != nil {
		c.JSON(http.StatusInternalServerError, gin.H{"error": "保存版本信息失败"})
		return
	}

	c.JSON(http.StatusOK, gin.H{
		"message": "版本信息上报成功",
	})
}
